# 1、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
#  存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
#  删除学生：删除的学生将不在展示
# 展示全部学生：可以看到全部的学生姓名
#  学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
# 以上内容，需要连接数据库，每次的数据都需要增、删、改、查去做
# student表：name、age、address、phone_number

# 使用类封装数据库

import pymysql


class DB:
    def __init__(self, host, user, password, database, cursorclass=None):
        """
        :param host: 就是阿里云服务器的ip地址
        :param user: 数据库的账号名  一般都是root
        :param password: 数据库密码
        :param database: 数据库的名字
        :param cursorclass:  返回的格式是字典格式，有key和value
        """
        self.host = host
        self.user = user
        self.password = password
        self.databases = database
        self.cursorclass = cursorclass

    def connect(self):
        self.db = pymysql.connect(host=self.host, user=self.user,
                                  password=self.password, database=self.databases, cursorclass=self.cursorclass)
        self.cursor = self.db.cursor()
        # 游标，对数据库有增、删、改的时候，需要提交游标还有数据库对象，不然无效
        # 查询的时候不需要提交游标

    def close(self):
        self.cursor.close()  # 关闭游标
        self.db.close()  # 关闭数据库

    def select_one(self, sql):  # select * from student where id = 3;   10
        self.connect()  # 第一步，调用连接数据库方法，连接数据库
        try:  # 尝试去执行sql
            self.cursor.execute(sql)  # 使用游标对象，执行sql语句
            result = self.cursor.fetchone()  # 返回一条数据 fetchone()
            self.close()  # 最后关闭掉数据库，不要忘记
        except Exception as e:  # 如果sql执行错误
            print("select error %s" % e)
            result = None
        return result

    def select_all(self, sql):  # select * from student where id = 3; 10
        self.connect()
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()  # 返回一条数据
            self.close()
        except Exception as e:
            print("select error %s" % e)
            result = None
        return result

    def __edit(self, sql):  # 相当于是一个主程序
        self.connect()  # 先连接数据库
        try:
            self.cursor.execute(sql)  # 使用游标对象，执行sql语句
            self.db.commit()  # 数据库对象提交
            result = "数据库更新成功"
        except Exception as e:
            result = "数据库更新失败" % e
        return result

    def insert(self, sql):  # insert into student(3,11,55);
        return self.__edit(sql)

    def delete(self, sql):  # delete from student where id = 3;
        return self.__edit(sql)

    def update(self, sql):  # update student set id = 3 where id =5;
        return self.__edit(sql)


db1 = DB(host="47.97.191.136", user="root", password="123456", database="test", cursorclass=
pymysql.cursors.DictCursor)
#
#
# print(db1.select_one("select * from student where name = '小天才'"))
# # db1.insert("insert into student(name,age) values('小天才',98)")
# print(db1.select_one("select * from student where name = '小天才'"))
#
# # db1.update("update student set name='大天才' where name = '小天才'")
# print(db1.delete("delete from student where id=1"))
# print(db1.select_all(f"select * from {'student'}"))
